package com.itheima.genericity_demo.genericity_interface;

/*
    模拟一个Collection接口，表示集合，集合操作的数据不确定。
    定义一个接口MyCollection具体表示

    接口泛型指定时机
        1 可以在实现类实现接口时，确定接口中的泛型的类型
        2 如果实现类和接口不指定具体的类型 ,继续使用泛型指定，变成含有泛型的类使用。
 */
public interface MyCollection<E> {
    public abstract boolean add(E e);

    public abstract boolean remove(E e);
}

// 注意 : 泛型接口 , 泛型如果没有被指定 , 那么默认就是Object类型
class MyCollectionImpl1 implements MyCollection {

    @Override
    public boolean add(Object o) {
        return false;
    }

    @Override
    public boolean remove(Object o) {
        return false;
    }
}

// 1 可以在实现类实现接口时，确定接口中的泛型的类型
class MyCollectionImpl2 implements MyCollection<String> {
    @Override
    public boolean add(String s) {
        return false;
    }

    @Override
    public boolean remove(String s) {
        return false;
    }
}

// 2 如果实现类和接口不指定具体的类型 ,继续使用泛型定义，变成含有泛型的类使用。
class MyCollectionImpl3<A> implements MyCollection<A> {
    @Override
    public boolean add(A a) {
        return false;
    }

    @Override
    public boolean remove(A a) {
        return false;
    }
}
class Test {
    public static void main(String[] args) {
        MyCollectionImpl3<Integer> collectionImpl3 = new MyCollectionImpl3<>();

    }
}

